//package com.lxw.station.controller;
//
//import com.alibaba.fastjson.JSON;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.lxw.station.GitOps;
//import com.lxw.station.chatgpt.spark.Hellospark;
//import com.lxw.station.core.R;
//import com.lxw.station.core.Result;
//import com.lxw.station.entity.GitProject;
//import com.lxw.station.service.GitProjectService;
//import lombok.SneakyThrows;
//import lombok.extern.slf4j.Slf4j;
//import net.lingala.zip4j.ZipFile;
//import net.lingala.zip4j.model.ZipParameters;
//import org.springframework.util.StringUtils;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.PutMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.annotation.PostConstruct;
//import javax.annotation.Resource;
//import java.io.File;
//import java.nio.file.Files;
//import java.nio.file.Paths;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.Comparator;
//import java.util.HashSet;
//import java.util.List;
//import java.util.Map;
//import java.util.Optional;
//import java.util.Set;
//import java.util.function.Function;
//import java.util.stream.Collectors;
//
//@RestController
//@RequestMapping("/gitProject")
//@Slf4j
//public class GitProjectController {
//
//    @Resource
//    GitProjectService gitProjectService;
//
//    /**
//     * 根据主键更新
//     * @param gitProject
//     * @return
//     */
//    @PutMapping("/gitProject")
//    public Result<Object> updateById(@RequestBody GitProject gitProject) {
//        gitProjectService.updateById(gitProject);
//        return R.ok().setMsg("更新成功");
//    }
//
//    @SneakyThrows
//    @GetMapping("/titleAndDesc")
//    public void titleAndDesc() {
//        LambdaQueryWrapper<GitProject> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(GitProject::getOk, "0");
//        List<GitProject> list = gitProjectService.list(wrapper);
//        log.info("需要生成标题的资源数:{}", list.size());
//        Map<String, GitProject> map = list.stream().collect(Collectors.toMap(GitProject::getId, Function.identity()));
//        extracted(map);
//    }
//
//    @GetMapping("/titleAndDesc2")
////    @PostConstruct
//    public void titleAndDesc2() {
//        LambdaQueryWrapper<GitProject> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(GitProject::getOk, "1");
//        List<GitProject> list = gitProjectService.list(wrapper);
//        GitProject update = null;
//        for (GitProject gitProject : list) {
//            try {
//                String sparkResult = gitProject.getSparkResult();
//                sparkResult = sparkResult.replaceAll("[*#-]", "").replace("标题：\n", "");
//                if (sparkResult.contains("注意")) {
////                log.warn(sparkResult);
//                }
//                int index = sparkResult.indexOf("\n");
//                if (index == -1) {
//                    System.out.println(JSON.toJSONString(gitProject));
//                }
//                String title = sparkResult.substring(0, index);
//                title = title.replace("标题：", "").replace("Title:", "").replace("\"", "").trim();
//                String desc = sparkResult.substring(index + 1);
//                desc = desc.replace("描述：", "").trim();
//                if (desc.length() > 500) {
//                    desc = desc.substring(0, 499);
//                }
////                System.out.println("==========");
////                System.out.println(title);
////                System.out.println(desc);
//                update = new GitProject();
//                update.setId(gitProject.getId());
//                update.setSparkTitle(title);
//                update.setSparkDesc(desc);
//                gitProjectService.updateById(update);
//            } catch (Exception e) {
//                log.error(JSON.toJSONString(update));
//
//            }
//
////            String[] split = sparkResult.split("描述：");
////            if (split.length != 2) {
//////                log.error(sparkResult);
////            }else{
////                String title = split[0];
////                title = title.replace("标题:","");
////                String desc = split[1];
////                desc = desc.replace("描述:","");
////            }
//        }
//
//    }
//
////    @PostConstruct
//    public void zip() {
//        LambdaQueryWrapper<GitProject> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(GitProject::getOk, "1");
//        List<GitProject> list = gitProjectService.list(wrapper);
//        Map<String, GitProject> map = list.stream().collect(Collectors.toMap(item -> item.getId(), Function.identity()));
//        for (File dir : new File("E:\\csdn\\gitee").listFiles()) {
//            try {
//                File[] files = dir.listFiles();
////                for (File file : files) {
////                    if (file.getName().endsWith(".zip")) {
////                    System.out.println(dir+"下zip以存在"+file.getAbsolutePath());
////                    file.delete();
////                    }
////                }
//                if (Arrays.stream(files).anyMatch(item -> item.getName().endsWith(".zip"))) {
//                    continue;
//                }
//                if (files.length == 1) {
//                    File project = files[0];
//                    GitProject gitProject = map.get(dir.getName());
//                    if (gitProject != null) {
//                        String title = gitProject.getSparkTitle();
//                        String zipFileFullName = dir.getAbsolutePath() + "\\" + title + ".zip";
//                        packageZip(zipFileFullName, project.getAbsolutePath(), title);
//                    }
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//
//        }
//    }
//
//
//    //    @PostConstruct
//    public void download() {
//        List<GitProject> list = gitProjectService.list();
//        List<GitProject> result = new ArrayList<>();
//        result.addAll(list.stream().filter(item -> StringUtils.hasText(item.getDescription())).collect(Collectors.toList()));
//        result.addAll(list.stream().filter(item -> !StringUtils.hasText(item.getDescription())).collect(Collectors.toList()));
//        String[] files = new File("E:\\csdn\\gitee").list();
//        log.info(Arrays.toString(files));
//        for (GitProject gitProject : result) {
//            try {
//                if (Arrays.stream(files).anyMatch(item -> item.equals(gitProject.getTitle()))) {
//                    continue;
//                }
//                log.info(JSON.toJSONString(gitProject));
//                String localPath = "E:\\csdn\\gitee\\" + gitProject.getId() + "\\" + gitProject.getTitle();
//                GitOps.clone(gitProject.getUrl(), localPath);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//    @SneakyThrows
//    public void packageZip(String zipFileFullName, String folder, String rootFolder) {
//        long start = System.currentTimeMillis();
//        ZipParameters parameters = new ZipParameters();
//        parameters.setRootFolderNameInZip(rootFolder);
//        // 压缩包位置
//        ZipFile zipFile = new ZipFile(zipFileFullName);
//        // 添加文件夹到压缩文件，包括子文件夹和文件
//        zipFile.addFolder(new File(folder), parameters);
//        long end = System.currentTimeMillis();
//        System.out.println((end - start) + "\t打包完成:" + zipFileFullName);
//    }
//
//    @SneakyThrows
//    public static void main(String[] args) {
//    }
//
//    private void extracted(Map<String, GitProject> map) {
//        for (File dir4Id : new File("E:\\csdn\\gitee").listFiles()) {
//            for (File projectDir : dir4Id.listFiles()) {
//                String dir4IdName = dir4Id.getName();
//                String result = "";
//                try {
//                    GitProject project = map.get(dir4IdName);
//                    if (project == null) {
//                        continue;
//                    }
//                    File readmeFile = getReadmeFile(projectDir);
//                    if (readmeFile != null) {
//                        String readMeContent = getContent(readmeFile.getAbsolutePath());
//                        if (readMeContent.length() == 0) {
//                            continue;
//                        }
//                        result = Hellospark.titleandDesc(readMeContent);
//                        String[] split = result.split("\\n+");
//                        String title = split[0].replace("标题：", "");
//                        String desc = split[1].replace("描述：", "");
//                        GitProject update = new GitProject();
//                        update.setId(dir4IdName);
//                        update.setSparkResult(result);
//                        update.setSparkTitle(title);
//                        update.setSparkDesc(desc);
//                        gitProjectService.updateById(update);
//                    }
//                } catch (Exception e) {
//                    log.error(dir4IdName, result);
//                    e.printStackTrace();
//                }
//            }
//        }
//    }
//
//    /**
//     * 获取有效的readme文件内容
//     * @param fileFullName
//     * @return
//     */
//    @SneakyThrows
//    public static String getContent(String fileFullName) {
//        String content = new String(Files.readAllBytes(Paths.get(fileFullName)));
//        String imageRegex = "!\\[.*?\\]\\(.*?\\)";
//        content = content.replaceAll(imageRegex, "");
//
//        // 替换链接格式: [link text](URL)
//        String linkRegex = "\\[.*?\\]\\(.*?\\)";
//        content = content.replaceAll(linkRegex, "");
//        // 替换代码块格式: ```code block```
//        String codeBlockRegex = "```[\\s\\S]*?```";
//        content = content.replaceAll(codeBlockRegex, "");
//        // 将多个换行替换为一个换行
//        String multipleNewlinesRegex = "(\\r\\n|\\n|\\r){2,}";
//        content = content.replaceAll(multipleNewlinesRegex, "\n");
//
//        return content;
//    }
//
//    public static void readme() {
//        Set<String> readmeset = new HashSet<>();
//        for (File dir4Id : new File("E:\\csdn\\gitee").listFiles()) {
//            boolean hasReadme = false;
//            for (File projectDir : dir4Id.listFiles()) {
//                for (File file : projectDir.listFiles()) {
//                    String lowerCase = file.getName().toLowerCase();
//                    if (lowerCase.contains("readme")) {
//                        readmeset.add(file.getName());
//                        hasReadme = true;
//                        if (file.getName().equals("运行命令ReadMe.txt")) {
//                            System.out.println(file.getAbsolutePath());
//                        }
//                    }
//                }
//            }
//            if (!hasReadme) {
//                System.out.println("没有readme文件");
//            }
//        }
//        System.out.println(readmeset);
//    }
//
//    /**
//     * 获取最佳readme文件
//     * @param projectDir
//     * @return
//     */
//    public static File getReadmeFile(File projectDir) {
//        List<File> readmeFiles = new ArrayList<>();
//        for (File file : projectDir.listFiles()) {
//            if (file.isDirectory()) {
//                continue;
//            }
//            String lowerCase = file.getName().toLowerCase();
//            if (lowerCase.contains("readme")) {
//                readmeFiles.add(file);
//            }
//        }
//        if (readmeFiles.size() == 0) {
//            return null;
//        }
//        if (readmeFiles.size() == 1) {
//            return readmeFiles.get(0);
//        }
//        Optional<File> zhReadMe = readmeFiles.stream().filter(item -> item.getName().toLowerCase().contains("zh")).findFirst();
//        if (zhReadMe.isPresent()) {
//            return zhReadMe.get();
//        }
//        // README.md  README_ENG.md
//        return readmeFiles.stream().sorted(Comparator.comparingInt(item -> item.getName().length())).findFirst().get();
//    }
//
//
//}
